////
////  test Warp.cpp
////  markerARLib
////
////  Created by fg on 16/5/6.
////  Copyright © 2016年 CvidKal. All rights reserved.
////
//
//#include "Marker.h"
//
//
//#include "Convert.hpp"
//#include "BRIEF.h"
//using namespace cv;
//using namespace std;
//
//
//#include "globalInit.h"
//
//
//int main()
//{
//    BRIEF brief(10,500);
//    TickMeter tm;
//    globalInit(640, 480, 520);
//    Guo::ORB orb;
//    Mat gray;
//    vector<KeyPoint> kpts1,kpts2;
//    Mat desp1,desp2;
//    Mat a,b;
//    a = imread("/Users/fg/cycle/images/Marker0.jpg");
//    b = imread("/Users/fg/cycle/images/Query3.jpg");
//    cvtColor(a, gray, CV_BGR2GRAY);
//    Mat mask = Mat(gray.size(),CV_8U,254);
//    orb(a,mask,kpts1,desp1);
//    orb(b,mask,kpts2,desp2);
//    Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("BruteForce-Hamming");
//    std::vector<DMatch> dmatch;
//    matcher->match(desp1, desp2, dmatch);
//    vector<int> idx;
//    GetMatch::GetInliers(dmatch,idx,50);
//    GetMatch::GetMaskObj(dmatch, idx);
//    vector<Point2f> query2D,train2D;
//    GetMatch::preparePoint2D(kpts1, kpts2, dmatch,query2D, train2D);
//    Mat H = findHomography(query2D, train2D,CV_RANSAC);
//    Mat warpImg;
//    tm.start();
//    warpPerspective(gray, warpImg, H, a.size());
//    tm.stop();
//    cout<<"OpenCV warp time:"<<tm.getTimeSec()<<endl;
//    Marker m(a,cv::Matx33d::eye(),1);
//    Mat warp2;
//    Mat warpMask;
//    warpPerspective(mask, warpMask, H, mask.size());
//    tm.reset();
//    tm.start();
//    m.warpTo(Converter::CV2Eigen(H), mask, warp2);
//    tm.stop();
//    imshow("mask",warpMask);
//    brief(warp2,warpMask,kpts1,desp1);
//    brief(warpImg,warpMask,kpts2,desp2);
//    matcher->match(desp1, desp2, dmatch);
//    GetMatch::GetInliers(dmatch,idx,50);
//    GetMatch::GetMaskObj(dmatch, idx);
//    GetMatch::preparePoint2D(kpts1, kpts2, dmatch,query2D, train2D);
//    Mat inliers;
//    findHomography(query2D, train2D,CV_RANSAC,3,inliers);
//    cout<<norm(inliers,NORM_L1)<<endl;
//    
//    cout<<"My warp time:"<<tm.getTimeSec()<<endl;
//    imshow("a", a);
//    imshow("b", b);
//    imshow("warp", warpImg);
//    imshow("warp2", warp2);
//    cvWaitKey();
//}